package com.atguigu.oss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectResult;
import com.atguigu.oss.service.OSsService;
import com.atguigu.oss.utlis.ConstantPropertiesUtil;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;


@Service
public class OSsServiceImpl implements OSsService {



    @Override
    public String uploadFileAvatar(MultipartFile file) throws IOException {

        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = ConstantPropertiesUtil.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtil.BUCKET_NAME;

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 获取上传的输入流
        InputStream inputStream = file.getInputStream(); //从用户传入的文件流获取文件


        //获取文件名称
        String fileName = file.getOriginalFilename();

        //1 在文件名称里面添加随机唯一的值
        String uuid = UUID.randomUUID().toString().replaceAll("-","");
        // yuy76t5rew01.jpg
        fileName = uuid+fileName;


        //2 把文件按照日期进行分类
        //获取当前日期
        //   2019/11/12
        String datePath = new DateTime().toString("yyyy/MM/dd");
        //拼接
        //  2019/11/12/ewtqr313401.jpg
        fileName = datePath+"/"+fileName;

        // 依次填写Bucket名称（例如examplebucket）和 Object完整路径（例如exampledir/exampleobject.txt）。Object完整路径中不能包含Bucket名称。
        //参数一 bucket名称
        //参数二 上传到OSS文件的路径和文件名 //aa//b/1.png
        //参数三 上传文件输入流
        PutObjectResult putObjectResult = ossClient.putObject(bucketName, fileName, inputStream);

        System.out.println(putObjectResult);

        // 关闭OSSClient。
        ossClient.shutdown();
        //http://ebu-6695.oss-cn-shanghai.aliyuncs.com/default.jpg
        //上传之后文件路径返回,需要上传到阿里云oss路径手动拼接并返回
        String url = "http://"+bucketName+"."+endpoint+"/"+fileName;

        return url;
    }
}
